package com.fancy.recommendation.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fancy.recommendation.entity.UserPreference;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 用户偏好Mapper
 *
 * @author fancy
 */
@Mapper
public interface UserPreferenceMapper extends BaseMapper<UserPreference> {

    /**
     * 获取用户偏好列表
     */
    List<UserPreference> getUserPreferences(@Param("userId") Long userId);

    /**
     * 获取用户特定类型偏好
     */
    List<UserPreference> getUserPreferencesByType(@Param("userId") Long userId, @Param("preferenceType") String preferenceType);

    /**
     * 批量插入或更新偏好
     */
    int batchInsertOrUpdate(@Param("preferences") List<UserPreference> preferences);

    /**
     * 获取用户偏好权重总和
     */
    BigDecimal getUserPreferenceWeightSum(@Param("userId") Long userId, @Param("preferenceType") String preferenceType);

    /**
     * 清理低权重偏好
     */
    int cleanLowWeightPreferences(@Param("userId") Long userId, @Param("minWeight") BigDecimal minWeight);

    /**
     * 获取热门偏好值
     */
    List<Map<String, Object>> getPopularPreferenceValues(@Param("preferenceType") String preferenceType,
                                                        @Param("minUserCount") Integer minUserCount,
                                                        @Param("limit") Integer limit);
}
